package com.prime.tutorial.moviestore.service.reports;

import com.prime.tutorial.moviestore.domain.Device;
import com.prime.tutorial.moviestore.domain.Location;
import com.prime.tutorial.moviestore.domain.Users;

import java.util.List;

/**
 * Interface for the implementation of reports.
 * @author vasylja
 * @author iryna.masyuk
 */
public interface ReportsService {

    /**
     * Gets all currently active users
     * @return list of users
     */
    //OK
    public List<Users> getActiveUsersReport();

    /**
     * Gets users active during some time
     * @param start start time
     * @param end end time
     * @return list of users
     */
    //not used
    public List<Users> getActiveUsersAtReport(java.util.Date start, java.util.Date end);
    //not used
    public List<Users> getUserActivityLastReport();
    //not used
    public List<Users> getUserActivityReport();

    /**
     * Returns all installed devices (ie with STATE_ENABLED)
     * @return list of devices
     */
    //OK
    public List<Device> getDevicesInstalledReport();

    /**
     * Returns all installed CPEs (ie with STATE_ENABLED)
     * @return list of CPEs
     */
    //OK
    public List<Device> getCPEsInstalledReport();

    /**
     * Returns all addresses, where there are devices with free ports
     * @return list of locations
     */
    public List<Location> getAddressesWithFreePortsReport();

    /**
     * Returns all addresses, where devies are present
     * @return list of locations
     */
    public List<Location> getAddressesWithDevicesReport();

    /**
     * Returns all devices with STATE_PLANNED_INSTALLATION, STATE_AVAILABLE_INSTALLATION, STATE_APPROVED_INSTALLATION
     * @return list of devices
     */
    //OK
    public List<Device> getDevicesToBeInstalledReport();

    /**
     * Returns all devices with STATE_WITH_ERRORS
     * @return list of devices
     */
    //OK
    public List<Device> getListDevicesWithErrorsInTheirStatusReport();

    /**
     * 
     * @return
     */
    public List<Device> getNetworkWorkloadAnalisisReport();
}
